/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2009，所有权利保留。
 * 
 * 项目名：	rumba-widget2
 * 文件名：	RTipInfo.java
 * 模块说明：	
 * 修改历史：
 * Jan 27, 2009 - lxm - 创建。
 */
package com.hd123.rumba.gwt.widget2.client.tip;

import com.google.gwt.user.client.ui.Focusable;
import com.hd123.rumba.gwt.util.client.MessageRecord;

/**
 * 提示信息
 * 
 * @author lxm
 * 
 */
public class RTipInfo {

  public static final TipLevel nothing = TipLevel.nothing;
  public static final TipLevel info = TipLevel.info;
  public static final TipLevel warning = TipLevel.warning;
  public static final TipLevel error = TipLevel.error;

  private RTipInfo(TipLevel level, String message) {
    super();
    this.level = level;
    this.message = message;
  }

  /**
   * 创建一个“错误”级别的提示信息。
   * 
   * @param message
   *          指定提示信息文本。
   * @return 返回创建的提示信息。
   */
  public static RTipInfo error(String message) {
    return new RTipInfo(error, message);
  }

  /**
   * 创建一个“警告”级别的提示信息。
   * 
   * @param message
   *          指定提示信息文本。
   * @return 返回创建的提示信息。
   */
  public static RTipInfo warning(String message) {
    return new RTipInfo(warning, message);
  }

  /**
   * 创建一个“信息”级别的提示信息。
   * 
   * @param message
   *          指定提示信息文本。
   * @return 返回创建的提示信息。
   */
  public static RTipInfo info(String message) {
    return new RTipInfo(info, message);
  }

  private TipLevel level;
  private String message;

  /** 级别 */
  public TipLevel getLevel() {
    return level;
  }

  /** 信息 */
  public String getMessage() {
    return message;
  }

  /**
   * 转换为MessageRercord，用于在RMessagePanel显示
   * 
   * @param focusWidget
   *          点击RMessagePanel上的消息时焦点定位到此控件
   * @return
   */
  public MessageRecord toMessageRecord(Focusable focusWidget) {
    int level = MessageRecord.LEVEL_INFO;
    if (getLevel() == warning)
      level = MessageRecord.LEVEL_WARNING;
    else if (getLevel() == error)
      level = MessageRecord.LEVEL_ERROR;
    return MessageRecord.newPut(getMessage(), level, focusWidget);
  }

  public static class TipLevel implements Comparable {

    public static final TipLevel nothing = new TipLevel(0, "nothing", true);
    public static final TipLevel info = new TipLevel(10, "info", true);
    public static final TipLevel warning = new TipLevel(20, "warning", false);
    public static final TipLevel error = new TipLevel(30, "error", false);

    private TipLevel(int value, String name, boolean valid) {
      super();
      this.value = value;
      this.name = name;
      this.valid = valid;
    }

    private int value;
    private String name;
    private boolean valid;

    /** 取值 */
    public int getValue() {
      return value;
    }

    /** 名称 */
    public String getName() {
      return name;
    }

    /** 取得是否验证通过。 */
    public boolean isValid() {
      return valid;
    }

    public int compareTo(Object o) {
      if (!(o instanceof TipLevel))
        return 0;
      return value - ((TipLevel) o).getValue();
    }

    public static TipLevel valueOf(String name) {
      if (name == null)
        return nothing;
      else if (name.equals(info.name))
        return info;
      else if (name.equals(warning.name))
        return warning;
      else if (name.equals(error.name))
        return error;
      return null;
    }
  }
}
